package com.zenithmind.chat.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.chat.pojo.entity.ChatFriendRequest;
import com.zenithmind.chat.pojo.vo.ChatFriendRequestVO;
import com.zenithmind.common.result.PageResult;

import java.util.List;

/**
 * 好友申请服务接口
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface ChatFriendRequestService extends IService<ChatFriendRequest> {

    /**
     * 分页查询好友申请列表
     * 
     * @param userId 用户ID
     * @param type 类型（sent-发送的，received-接收的）
     * @param status 状态
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 申请列表
     */
    PageResult<ChatFriendRequestVO> getFriendRequestPage(String userId, String type, Integer status, 
                                                        Integer pageNum, Integer pageSize);

    /**
     * 查询用户的好友申请列表
     * 
     * @param userId 用户ID
     * @param type 类型（sent-发送的，received-接收的）
     * @param status 状态
     * @return 申请列表
     */
    List<ChatFriendRequestVO> getUserFriendRequests(String userId, String type, Integer status);

    /**
     * 根据ID查询好友申请详情
     * 
     * @param id 申请ID
     * @param userId 当前用户ID
     * @return 申请详情
     */
    ChatFriendRequestVO getFriendRequestById(String id, String userId);

    /**
     * 处理好友申请
     * 
     * @param requestId 申请ID
     * @param accept 是否同意
     * @param responseMessage 回复消息
     * @param userId 处理人ID
     * @return 处理结果
     */
    Boolean handleFriendRequest(String requestId, Boolean accept, String responseMessage, String userId);

    /**
     * 撤回好友申请
     * 
     * @param requestId 申请ID
     * @param userId 申请人ID
     * @return 撤回结果
     */
    Boolean withdrawFriendRequest(String requestId, String userId);

    /**
     * 删除好友申请记录
     * 
     * @param requestId 申请ID
     * @param userId 用户ID
     * @return 删除结果
     */
    Boolean deleteFriendRequest(String requestId, String userId);

    /**
     * 批量处理好友申请
     * 
     * @param requestIds 申请ID列表
     * @param accept 是否同意
     * @param userId 处理人ID
     * @return 处理结果
     */
    Boolean batchHandleFriendRequests(List<String> requestIds, Boolean accept, String userId);

    /**
     * 统计好友申请数量
     * 
     * @param userId 用户ID
     * @param type 类型
     * @param status 状态
     * @return 申请数量
     */
    Integer countFriendRequests(String userId, String type, Integer status);

    /**
     * 检查是否已发送过申请
     * 
     * @param requesterId 申请人ID
     * @param targetId 目标用户ID
     * @return 是否已发送
     */
    Boolean checkRequestExists(String requesterId, String targetId);

    /**
     * 清理过期申请
     * 
     * @param days 过期天数
     * @return 清理数量
     */
    Integer cleanExpiredRequests(Integer days);

    /**
     * 获取申请统计信息
     * 
     * @param userId 用户ID（可选）
     * @param startTime 开始时间（可选）
     * @param endTime 结束时间（可选）
     * @return 统计信息
     */
    Object getRequestStatistics(String userId, String startTime, String endTime);
}
